﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace Modelo.Seguridad
{
    public class CatalogoGrupos
    {
        
        private static CatalogoGrupos _Instancia;
        public static CatalogoGrupos ObtenerInstancia()
        {
            _Instancia = new CatalogoGrupos();
            return _Instancia;
        }

        public List<Entidades.Seguridad.Grupo> Col_Grupos;

        public CatalogoGrupos()
        {
            Col_Grupos = Mapping.Seguridad.MappingGrupos.ConsultarGrupos();
        }
        public ReadOnlyCollection<Entidades.Seguridad.Grupo> ListarGrupos()
        {
            return Col_Grupos.AsReadOnly();
        }

        public Entidades.Seguridad.Grupo BuscarGrupo(string idGrupo)
        {
            return this.Col_Grupos.Find(oGru => oGru.IdGrupo == idGrupo);
        }

        public ReadOnlyCollection<Entidades.Seguridad.Grupo> ListarGrupos(string descGrupo,bool estado)
        {
            var query = from grup in Col_Grupos
                        where (grup.Descripcion.ToLower().Contains(descGrupo.ToLower()))
                        select grup;

            if (estado)
            {
                query = query.Where(g => g.Estado);
            }

            return query.ToList().AsReadOnly();
        }

        public bool AgregarGrupo(Entidades.Seguridad.Grupo ogrupo)
        {
            Col_Grupos.Add(ogrupo);
            return Mapping.Seguridad.MappingGrupos.AgregarGrupo(ogrupo);
        }

        public bool EliminarGrupo(Entidades.Seguridad.Grupo ogrupo)
        {
            Entidades.Seguridad.Grupo oGrupo = BuscarGrupo(ogrupo.IdGrupo);
            Col_Grupos.Remove(oGrupo);
            return Mapping.Seguridad.MappingGrupos.EliminarGrupo(ogrupo);
        }
        public void ModificarGrupo(Entidades.Seguridad.Grupo ogrupo)
        {
            Entidades.Seguridad.Grupo oGrupo = BuscarGrupo(ogrupo.IdGrupo);

            Col_Grupos.Remove(oGrupo);
            Col_Grupos.Add(ogrupo);
            Mapping.Seguridad.MappingGrupos.ModificarGrupo(ogrupo);
            
        }

        public bool ValidarExistencia(Entidades.Seguridad.Grupo oGrupon)
        {
            if(this.Col_Grupos.Count(oGru => oGru.IdGrupo == oGrupon.IdGrupo) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }        
    }
}
